$import( "SmitearWebGL.Programs.LightPrePass.DepthProgram" );
$import( "SmitearWebGL.Programs.LightPrePass.NormalProgram" );
$import( "SmitearWebGL.Programs.LightPrePass.Terrain.DepthProgram" );
$import( "SmitearWebGL.Programs.LightPrePass.Terrain.NormalProgram" );
$import( "SmitearWebGL.Programs.LightPrePass.ShadowVolProgram" );

SmitearWebGL.Programs.InternalPrograms = {}

SmitearWebGL.Programs.InternalPrograms._internalPrograms = [];

SmitearWebGL.Programs.InternalPrograms.createInternalPrograms = function( programManager )
{
	var internalPrograms = SmitearWebGL.Programs.InternalPrograms._internalPrograms;
	internalPrograms.push( programManager.createResource( SmitearWebGL.Programs.InternalPrograms.Type.DEPTH, SmitearWebGL.Programs.LightPrePass.DepthProgram ) );
	internalPrograms.push( programManager.createResource( SmitearWebGL.Programs.InternalPrograms.Type.NORMAL, SmitearWebGL.Programs.LightPrePass.NormalProgram ) );
	internalPrograms.push( programManager.createResource( SmitearWebGL.Programs.InternalPrograms.Type.TERRAIN_DEPTH, SmitearWebGL.Programs.LightPrePass.Terrain.DepthProgram ) );
	internalPrograms.push( programManager.createResource( SmitearWebGL.Programs.InternalPrograms.Type.TERRAIN_NORMAL, SmitearWebGL.Programs.LightPrePass.Terrain.NormalProgram ) );
	internalPrograms.push( programManager.createResource( SmitearWebGL.Programs.InternalPrograms.Type.SHADOW_VOLUME, SmitearWebGL.Programs.LightPrePass.ShadowVolProgram ) );
	
	internalPrograms.push( programManager.createResource( SmitearWebGL.Programs.InternalPrograms.Type.LP_HBLUR, SmitearWebGL.Programs.LightPrePass.HBlurProgram ) );
	internalPrograms.push( programManager.createResource( SmitearWebGL.Programs.InternalPrograms.Type.LP_VBLUR, SmitearWebGL.Programs.LightPrePass.VBlurProgram ) );
	internalPrograms.push( programManager.createResource( SmitearWebGL.Programs.InternalPrograms.Type.LP_POINT_LIGHT_DIFFUSE, SmitearWebGL.Programs.LightPrePass.PointLightDiffuseProgram ) );
	internalPrograms.push( programManager.createResource( SmitearWebGL.Programs.InternalPrograms.Type.LP_DIRECT_LIGHT_DIFFUSE, SmitearWebGL.Programs.LightPrePass.DirLightDiffuseProgram ) );
	internalPrograms.push( programManager.createResource( SmitearWebGL.Programs.InternalPrograms.Type.LP_SPOT_LIGHT_DIFFUSE, SmitearWebGL.Programs.LightPrePass.SpotLightDiffuseProgram ) );
	internalPrograms.push( programManager.createResource( SmitearWebGL.Programs.InternalPrograms.Type.LP_POINT_LIGHT_SPECULAR, SmitearWebGL.Programs.LightPrePass.PointLightSpecularProgram ) );
	internalPrograms.push( programManager.createResource( SmitearWebGL.Programs.InternalPrograms.Type.LP_DIRECT_LIGHT_SPECULAR, SmitearWebGL.Programs.LightPrePass.DirLightSpecularProgram ) );
	internalPrograms.push( programManager.createResource( SmitearWebGL.Programs.InternalPrograms.Type.LP_SPOT_LIGHT_SPECULAR, SmitearWebGL.Programs.LightPrePass.SpotLightSpecularProgram ) );
	internalPrograms.push( programManager.createResource( SmitearWebGL.Programs.InternalPrograms.Type.LP_POST_PROCESSING, SmitearWebGL.Programs.LightPrePass.PostProcessingProgram ) );
	internalPrograms.push( programManager.createResource( SmitearWebGL.Programs.InternalPrograms.Type.LP_SHADOW, SmitearWebGL.Programs.LightPrePass.ShadowProgram ) );
	internalPrograms.push( programManager.createResource( SmitearWebGL.Programs.InternalPrograms.Type.LP_SSAO, SmitearWebGL.Programs.LightPrePass.SSAOProgram ) );
	
	internalPrograms.push( programManager.createResource( SmitearWebGL.Programs.InternalPrograms.Type.HDR_HBLUR, SmitearWebGL.Programs.Hdr.HBlurProgram ) );
	internalPrograms.push( programManager.createResource( SmitearWebGL.Programs.InternalPrograms.Type.HDR_VBLUR, SmitearWebGL.Programs.Hdr.VBlurProgram ) );
	internalPrograms.push( programManager.createResource( SmitearWebGL.Programs.InternalPrograms.Type.HDR_ADAPTATION, SmitearWebGL.Programs.Hdr.AdaptationProgram ) );
	internalPrograms.push( programManager.createResource( SmitearWebGL.Programs.InternalPrograms.Type.HDR_BLOOM, SmitearWebGL.Programs.Hdr.BloomProgram ) );
	internalPrograms.push( programManager.createResource( SmitearWebGL.Programs.InternalPrograms.Type.HDR_COMBINE, SmitearWebGL.Programs.Hdr.CombineProgram ) );
	internalPrograms.push( programManager.createResource( SmitearWebGL.Programs.InternalPrograms.Type.HDR_DOWN_SAMPLE, SmitearWebGL.Programs.Hdr.DownSampleProgram ) );
	internalPrograms.push( programManager.createResource( SmitearWebGL.Programs.InternalPrograms.Type.HDR_LUMINANCE, SmitearWebGL.Programs.Hdr.LuminanceProgram ) );
	
	for ( var i = 0; i < SmitearWebGL.Programs.InternalPrograms._internalPrograms.length; ++ i )
	{
		SmitearWebGL.Programs.InternalPrograms._internalPrograms[i].generateShader();
	}
}

SmitearWebGL.Programs.InternalPrograms.releaseInternalPrograms = function()
{
	for ( var i = 0; i < SmitearWebGL.Programs.InternalPrograms._internalPrograms.length; ++ i )
	{
		SmitearWebGL.Programs.InternalPrograms._internalPrograms[i].release();
	}
}

SmitearWebGL.Programs.InternalPrograms.Type =
{
	DEPTH :						"__depth_program__",
	NORMAL :					"__normal_program__",
	TERRAIN_DEPTH :				"__terrain_depth_program__",
	TERRAIN_NORMAL : 			"__terrain_normal_program__",
	SHADOW_VOLUME :				"__shadow_volume_program__",
	LP_HBLUR :					"__light_pre_pass_h_blur__",
	LP_VBLUR :					"__light_pre_pass_v_blur__",
	LP_POINT_LIGHT_DIFFUSE :	"__light_pre_pass_point_light_diffuse__",
	LP_DIRECT_LIGHT_DIFFUSE :	"__light_pre_pass_direct_light_diffuse__",
	LP_SPOT_LIGHT_DIFFUSE :		"__light_pre_pass_spot_light_diffuse__",
	LP_POINT_LIGHT_SPECULAR :	"__light_pre_pass_point_light_specular__",
	LP_DIRECT_LIGHT_SPECULAR :	"__light_pre_pass_direct_light_specular__",
	LP_SPOT_LIGHT_SPECULAR :	"__light_pre_pass_spot_light_specular__",
	LP_POST_PROCESSING :		"__light_pre_pass_post_processing__",
	LP_SHADOW :					"__light_pre_pass_shadow__",
	LP_SSAO :					"__light_pre_pass_ssao__",
	
	HDR_HBLUR :					"__hdr_h_blur__",
	HDR_VBLUR :					"__hdr_v_blur__",
	HDR_ADAPTATION :			"__hdr_adaptation__",
	HDR_BLOOM :					"__hrd_bloom__",
	HDR_COMBINE :				"__hdr_combine__",
	HDR_DOWN_SAMPLE :			"__hdr_down_sample__",
	HDR_LUMINANCE :				"__hdr_luminance__"
}